﻿using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZaidimasSandelys.CustomDrawTools;
using ZaidimasSandelys.Models.DataStructures;

namespace ZaidimasSandelys.Models.Interfaces
{
    public interface IAppData
    {
        /// <summary>
        /// Šios 2 komandos skirtos rankiniam valdymui. Intrfeise išvardinti Get metodai patys atidaro ir uždaro Connection
        /// </summary>
        DbConnection Conn { get; }
        void CloseConnection();

        /// <summary>
        /// Pagrindinis meniu
        /// </summary>
        /// <returns></returns>
        IEnumerable<MainMenuItem> GetMainMenu();

        /// <summary>
        /// Pradėti/Užbaigti
        /// </summary>
        /// <returns></returns>
        string[] GetStartButtonText();

        /// <summary>
        /// Grąžina masyvą su žaidimo variantais
        /// </summary>
        /// <param name="gameComplexity">Lygis</param>
        /// <returns>Implementintų variantų sąrašas</returns>
        IEnumerable<VariantMenuItem> GetGameVariants(GameLevel gameComplexity);

        /// <summary>
        /// Verčiami į kitas kalbas tekstai
        /// </summary>
        /// <returns></returns>
        string[] GetMultilanguageConstants(string id);

        /// <summary>
        /// Užkrauna nurodyto žaidimo antraštę
        /// </summary>
        /// <param name="level">Lygis</param>
        /// <param name="variant">Variantas</param>
        /// <returns><see cref="GameHeader"/> arba NULLą jei tokio žaidimo duomenų bazėje nėra</returns>
        GameHeader LoadGameHeader(short level, short variant);

        /// <summary>
        /// Užkrauna konkretaus žaidimo elementus. Metodas kviečiamas iš skirtingų tredų.
        /// </summary>
        /// <param name="gameId">Žaidimo ID</param>
        /// <param name="elementType">Kraunamų elementų tipas, <see cref="VisualType"/></param>
        /// <returns>Nuskaityti elementai</returns>
        IEnumerable<IGameElement> LoadVisualElements(int gameId, VisualType elementType);
    }
}
